package ar.com.tesis.mobile.activities;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.daimajia.slider.library.Animations.DescriptionAnimation;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;
import com.pnikosis.materialishprogress.ProgressWheel;

import java.util.HashMap;
import java.util.List;

import ar.com.tesis.mobile.R;
import ar.com.tesis.mobile.model.FotoPuntoDeInteres;
import ar.com.tesis.mobile.model.PuntoDeInteres;
import ar.com.tesis.mobile.tareas.GetFotosPuntoDeInteres;

public class ActividadDetallePuntoDeInteres extends ActividadBasica implements BaseSliderView.OnSliderClickListener {

    private ProgressWheel barraProgreso;
    private TextView mensajeBarraDeProgreso;
    private PuntoDeInteres puntoDeInteres;
    private SliderLayout sliderFotos;
    private TextView historia;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actividad_detalle_punto_de_interes);

        setBotonReintentar();
        setearFuentesLayoutDesconexion();

        this.puntoDeInteres = PuntoDeInteres.class.cast(getIntent().getSerializableExtra(ActividadPuntoDeInteres.PDI));

        sliderFotos = (SliderLayout)findViewById(R.id.slider);

        barraProgreso = (ProgressWheel) findViewById(R.id.detalle_pdi_progressBar);
        mensajeBarraDeProgreso = (TextView) findViewById(R.id.fotos_pdi_progressBar_mensaje);

        cargarDetallesDelPDI();
        obtenerFotos();
        setTitle(puntoDeInteres.getNombre());
    }

    private void obtenerFotos() {

        if (estaConectado()) {

            mostrarBarraProgreso(true, this.barraProgreso, mensajeBarraDeProgreso);
            GetFotosPuntoDeInteres tarea = new GetFotosPuntoDeInteres(this, puntoDeInteres.getId());
            tarea.execute();
        } else {

            mostrarLayoutDesconexion();
        }
    }

    public void cargarDetallesDelPDI(){

        mostrarHistoriaONo(puntoDeInteres.getHistoria());
    }

    private void mostrarHistoriaONo(String valor) {

        TextView historia = (TextView) findViewById(R.id.historia_descripcion);

        if (!valor.trim().isEmpty()) {

            mostrarComoVisible(findViewById(R.id.tarjeta_historia));
            historia.setText(valor);
        } else {

            ocultarComoGone(findViewById(R.id.tarjeta_historia));
        }
    }

    private void mostrarLayoutDesconexion(){

        mostrarBarraProgreso(false, this.barraProgreso, mensajeBarraDeProgreso);
        mostrarPantallaDesconexion(true);
    }

    public void mostrarPantallaDesconexion(boolean mostrar){

        findViewById(R.id.layout_desconexion).setVisibility(mostrar ? View.VISIBLE : View.GONE);
    }

    @Override
    public void reintentarCallback() {
        //TODO reintentar callback
        mostrarPantallaDesconexion(false);
        mostrarBarraProgreso(true, barraProgreso, mensajeBarraDeProgreso);
        obtenerFotos();
    }

    public void fotosObtenidasCallback(List<FotoPuntoDeInteres> fotos){

        mostrarBarraProgreso(false, this.barraProgreso, mensajeBarraDeProgreso);
        loadSliderDeFotos(fotos);
    }

    public void loadSliderDeFotos(List<FotoPuntoDeInteres> fotos){

        HashMap<Integer,FotoPuntoDeInteres> urls = new HashMap<Integer, FotoPuntoDeInteres>();

        for ( FotoPuntoDeInteres foto: fotos){

            urls.put(foto.getId(), foto);
        }

        for(Integer id : urls.keySet()){
            TextSliderView textSliderView = new TextSliderView(this);
            // initialize a SliderLayout
            textSliderView
                    .description(urls.get(id).getNombre())
                    .image(urls.get(id).getUrl())
                    .setScaleType(BaseSliderView.ScaleType.Fit)
                    .setOnSliderClickListener(this);

            //add your extra information
            textSliderView.getBundle()
                    .putString("extra", urls.get(id).getDescripcion());

            sliderFotos.addSlider(textSliderView);
        }
        sliderFotos.setPresetTransformer(SliderLayout.Transformer.CubeIn);
        sliderFotos.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
        sliderFotos.setCustomAnimation(new DescriptionAnimation());
        sliderFotos.setDuration(8000);
        mostrarComoVisible(sliderFotos);
    }

    public void falloFotosCallback(){

        ocultarComoInvisible(sliderFotos);
        mostrarLayoutDesconexion();
    }

    @Override
    public void onSliderClick(BaseSliderView slider) {
        Toast.makeText(this,slider.getBundle().get("extra") + "",Toast.LENGTH_SHORT).show();
    }

}
